package cn.walls1717.wallsmall.cart.service;

import cn.walls1717.wallsmall.cart.vo.CartItemVO;
import cn.walls1717.wallsmall.cart.vo.CartVO;

import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * @author walls1717
 * @since 2022/11/14 21:42
 **/
public interface CartService {

    /**
     * 保存商品到购物车
     *
     * @param skuId skuId
     * @param num 商品数量
     */
    void saveCartItem(Long skuId, Integer num) throws ExecutionException, InterruptedException;

    /**
     * 根据skuId获取购物车中指定购物项
     *
     * @param skuId skuId
     * @return 购物项
     */
    CartItemVO getCartItemBySkuId(Long skuId);

    /**
     * 获取购物车信息
     *
     * @return 购物车信息
     */
    CartVO getCart() throws ExecutionException, InterruptedException;

    /**
     * 根据指定key清空购物车
     *
     * @param key key
     */
    void removeCartByKey(String key);

    /**
     * 根据skuId更新购物车中购物项的选中状态
     *
     * @param skuId skuId
     * @param check 选中状态[0没有选中,1选中]
     */
    void updateCheckBySkuId(Long skuId, Integer check);

    /**
     * 根据skuId更新购物车中购物项的数量
     *
     * @param skuId skuId
     * @param num 数量
     */
    void updateCountBySkuId(Long skuId, Integer num);

    /**
     * 根据skuId删除购物项
     *
     * @param skuId skuId
     */
    void removeCartItemBySkuId(Long skuId);

    /**
     * 获取当前用户购物车中的所有购物项
     *
     * @return 购物项集合
     */
    List<CartItemVO> listCurrentUserCartItems();
}
